package com.cy.pj.sys.dao;

import com.cy.pj.common.pojo.Node;
import com.cy.pj.sys.pojo.SysMenu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

@Mapper
public interface SysMenuDao {

    /**
     * 基于当前登录用户ID查找该用户的权限集合
     *
     * @param userId 当前登录用户ID
     * @return 查找到的权限集合
     */
    Set<String> selectUserPermissions(Integer userId);

    /**
     * 向数据库表中添加菜单信息
     *
     * @param menu 存储了菜单信息的对象
     * @return 新增的行数
     */
    int insertMenu(SysMenu menu);

    /**
     * 基于 id 更新菜单信息
     *
     * @param menu 封装菜单更新信息
     * @return 更新的行数
     */
    int updateMenu(SysMenu menu);

    /**
     * 定义基于菜单 id 查询菜单信息的方法
     */
    SysMenu selectById(Integer id);

    /**
     * 查询所有菜单，以及菜单对应的上级菜单名称
     *
     * @return 返回查询到的菜单信息
     */
    List<SysMenu> selectMenus();

    /**
     * 查询树节点信息，在添加或编辑菜单时，
     * 会以树结构方式呈现可选的上级菜单信息
     *
     * @return 封装菜单id，菜单名称，父菜单id的Node对象列表
     */
    @Select("select id,name,parentId from sys_menus")
    List<Node> selectMenuTreeNodes();

    /**
     * 基于菜单id数组删除菜单
     *
     * @param ids 页面勾选的菜单id数组
     * @return 删除的条数
     */
    Integer deleteMenuById(Integer... ids);

}
